home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / CBASE102.ARJ / CBASE.H < prev    next >
Text File  |  1991-09-23  |  8KB  |  227 lines

  1. /*    Copyright (c) 1989 Citadel    */
  2. /*       All Rights Reserved        */
  3.  
  4. /*man---------------------------------------------------------------------------
  5. NAME
  6.      cbase - C database library
  7.  
  8. SYNOPSIS
  9.      #include <cbase.h>
  10.  
  11. DESCRIPTION
  12.      cbase is a database file managment library for indexed and
  13.      sequential access to records.  Below are listed the predefined
  14.      data types provided with cbase.  See the the cbase Programmer's
  15.      Guide for information on adding new data types.
  16.  
  17.      t_char         signed character
  18.      t_charv        signed character array
  19.      t_uchar        unsigned character
  20.      t_ucharv       unsigned character array
  21.      t_short        signed short integer
  22.      t_shortv       signed short integer array
  23.      t_ushort       unsigned short integer
  24.      t_ushortv      unsigned short integer array
  25.      t_int          signed integer
  26.      t_intv         signed integer array
  27.      t_uint         unsigned integer
  28.      t_uintv        unsigned integer array
  29.      t_long         long integer
  30.      t_longv        long integer array
  31.      t_ulong        unsigned long integer
  32.      t_ulongv       unsigned long integer array
  33.      t_float        float
  34.      t_floatv       float array
  35.      t_double       double
  36.      t_doublev      double array
  37.      t_ldouble      long double
  38.      t_ldoublev     long double array
  39.      t_pointer      pointer
  40.      t_pointerv     pointer array
  41.      t_string       character string
  42.      t_cistring     case-insensitive string
  43.      t_binary       block of binary data (e.g., graphics)
  44.  
  45. SEE ALSO
  46.      cbclose, cbcreate, cbdelcur, cbexport, cbgetkcur, cbgetlck,
  47.      cbgetr, cbgetrcur, cbgetrf, cbimport, cbinsert, cbkcursor,
  48.      cbkeyalign, cbkeyfirst, cbkeylast, cbkeynext, cbkeyprev,
  49.      cbkeysrch, cblock, cbmkndx, cbopen, cbputr, cbrcursor,
  50.      cbrecalign, cbreccnt, cbrecfirst, cbreclast, cbrecnext,
  51.      cbrecprev, cbrecsize, cbrmndx, cbsetkcur, cbsetrcur, cbsync.
  52.  
  53. ------------------------------------------------------------------------------*/
  54. #ifndef H_CBASE        /* prevent multiple includes */
  55. #define H_CBASE
  56.  
  57. /* #ident    "@(#)cbase.h    1.5 - 91/09/23" */
  58.  
  59. #include <ansi.h>
  60.  
  61. /* ansi headers */
  62. #ifdef AC_STDDEF
  63. #include <stddef.h>
  64. #endif
  65.  
  66. /* library headers */
  67. #include <btree.h>
  68. #include <lseq.h>
  69.  
  70. /* constants */
  71. #define CBOPEN_MAX    BOPEN_MAX    /* max # cbases open at once */
  72. #define CBM        (11)        /* btree order */
  73.  
  74. /* type definitions */
  75. typedef lspos_t    cbrpos_t;        /* cbase record file position */
  76. typedef btpos_t cbkpos_t;        /* cbase key file position */
  77.  
  78. typedef struct {            /* field definition */
  79.     size_t offset;            /* offset of field in record */
  80.     size_t len;            /* field length */
  81.     int type;            /* field data type */
  82.     int flags;            /* flags */
  83.     char *filename;            /* index file name */
  84. } cbfield_t;
  85.  
  86. typedef struct {            /* cbase control structure */
  87.     lseq_t *lsp;            /* lseq file containing records */
  88.     int flags;            /* status flags */
  89.     int fldc;            /* field count */
  90.     cbfield_t *fldv;        /* field definitions */
  91.     btree_t **btpv;            /* btree containing keys */
  92. } cbase_t;
  93.  
  94. /* cbfield_t bit flags */
  95. #define CB_FFLAGS      (03)    /* mask for all flags */
  96. #define CB_FKEY          (01)    /* field is a key */    
  97. #define CB_FUNIQ      (02)    /* constrain key to be unique */
  98.  
  99. /* function declarations */
  100. #ifdef AC_PROTO
  101. int        cbclose(cbase_t *cbp);
  102. int        cbcreate(const char *cbname, size_t recsize, int fldc,
  103.             const cbfield_t fldv[]);
  104. int        cbdelcur(cbase_t *cbp);
  105. int        cbexport(cbase_t *cbp, const char *filename);
  106. int        cbgetkcur(cbase_t *cbp, int field, cbkpos_t *cbkposp);
  107. int        cbgetlck(cbase_t *cbp);
  108. int        cbgetr(cbase_t *cbp , void *buf);
  109. int        cbgetrcur(cbase_t *cbp, cbrpos_t *cbrposp);
  110. int        cbgetrf(cbase_t *cbp, int field, void *buf);
  111. int        cbimport(cbase_t *cbp, const char *filename);
  112. int        cbinsert(cbase_t *cbp, const void *buf);
  113. int        cbkeyalign(cbase_t *cbp, int field);
  114. int        cbkeyfirst(cbase_t *cbp, int field);
  115. int        cbkeylast(cbase_t *cbp, int field);
  116. int        cbkeynext(cbase_t *cbp, int field);
  117. int        cbkeyprev(cbase_t *cbp, int field);
  118. int        cbkeysrch(cbase_t *cbp, int field, const void *buf);
  119. int        cblock(cbase_t *cbp, int ltype);
  120. int        cbmkndx(cbase_t *cbp, int field, int flags, char *filename);
  121. cbase_t *    cbopen(const char *cbname, const char *type, int cbfldc,
  122.             const cbfield_t fldv[]);
  123. int        cbputr(cbase_t *cbp , const void *buf);
  124. int        cbrecalign(cbase_t *cbp, int field);
  125. int        cbrecfirst(cbase_t *cbp);
  126. int        cbreclast(cbase_t *cbp);
  127. int        cbrecnext(cbase_t *cbp);
  128. int        cbrecprev(cbase_t *cbp);
  129. int        cbrposcmp(const void *p1, const void *p2, size_t n);
  130. int        cbrmndx(cbase_t *cbp, int field);
  131. int        cbsetkcur(cbase_t *cbp, int field, const cbkpos_t *cbkposp);
  132. int        cbsetrcur(cbase_t *cbp, const cbrpos_t *cbrposp);
  133. int        cbsync(cbase_t *cbp);
  134. #else
  135. int        cbclose();
  136. int        cbcreate();
  137. int        cbdelcur();
  138. int        cbexport();
  139. int        cbgetkcur();
  140. int        cbgetlck();
  141. int        cbgetr();
  142. int        cbgetrcur();
  143. int        cbgetrf();
  144. int        cbimport();
  145. int        cbinsert();
  146. int        cbkeyalign();
  147. int        cbkeyfirst();
  148. int        cbkeylast();
  149. int        cbkeynext();
  150. int        cbkeyprev();
  151. int        cbkeysrch();
  152. int        cblock();
  153. int        cbmkndx();
  154. cbase_t *    cbopen();
  155. int        cbputr();
  156. int        cbrecalign();
  157. int        cbrecfirst();
  158. int        cbreclast();
  159. int        cbrecnext();
  160. int        cbrecprev();
  161. int        cbrposcmp();
  162. int        cbrmndx();
  163. int        cbsetkcur();
  164. int        cbsetrcur();
  165. int        cbsync();
  166. #endif    /* #ifdef AC_PROTO */
  167.  
  168. /* macros */
  169. #define cbfldc(CBP)        ((CBP)->fldc)
  170. #define cbfldv(CBP)        ((CBP)->fldv)
  171. #define cbiskey(CBP, FLD)    ((int)(CBP)->fldv[(FLD)].flags & CB_FKEY)
  172. #define cbisuniq(CBP, FLD)    ((int)(CBP)->fldv[(FLD)].flags & CB_FUNIQ)
  173. #define    cbkcursor(CBP, FLD)    (btcursor((CBP)->btpv[(FLD)]))
  174. #define    cbrcursor(CBP)        (lscursor((CBP)->lsp))
  175. #define    cbreccnt(CBP)        ((unsigned long)lsreccnt((CBP)->lsp))
  176. #define    cbrecsize(CBP)        ((size_t)lsrecsize((CBP)->lsp))
  177.  
  178. /* lock types */
  179. #define CB_UNLCK    (0)    /* unlock */
  180. #define CB_RDLCK    (1)    /* read lock */
  181. #define CB_WRLCK    (2)    /* write lock */
  182. #define CB_RDLKW    (3)    /* read lock, wait */
  183. #define CB_WRLKW    (4)    /* write lock, wait */
  184.  
  185. /* cbase data types */
  186. #define t_char         (0)    /* signed character */
  187. #define t_charv         (1)    /* signed character vector */
  188. #define t_uchar         (2)    /* unsigned character */
  189. #define t_ucharv     (3)    /* unsigned character vector */
  190. #define t_short         (4)    /* signed short integer */
  191. #define t_shortv     (5)    /* signed short integer vector */
  192. #define t_ushort     (6)    /* unsigned short integer */
  193. #define t_ushortv     (7)    /* unsigned short integer vector */
  194. #define t_int         (8)    /* signed integer */
  195. #define t_intv         (9)    /* signed integer vector */
  196. #define t_uint        (10)    /* unsigned integer */
  197. #define t_uintv        (11)    /* unsigned integer vector */
  198. #define t_long        (12)    /* long integer */
  199. #define t_longv        (13)    /* long integer vector */
  200. #define t_ulong        (14)    /* unsigned long integer */
  201. #define t_ulongv    (15)    /* unsigned long integer vector */
  202. #define t_float        (16)    /* float */
  203. #define t_floatv    (17)    /* float vector */
  204. #define t_double    (18)    /* double */
  205. #define t_doublev    (19)    /* double vector */
  206. #define t_ldouble    (20)    /* long double */
  207. #define t_ldoublev    (21)    /* long double vector */
  208. #define t_pointer    (22)    /* pointer */
  209. #define t_pointerv    (23)    /* pointer vector */
  210. #define t_string    (24)    /* character string */
  211. #define t_cistring    (25)    /* case-insensitive character string */
  212. #define t_binary    (26)    /* block of binary data (e.g., graphics) */
  213.  
  214. /* error codes */
  215. #define CBEOS        (-60)        /* start of cbase error code domain */
  216. #define CBEMFILE    (CBEOS - 1)    /* too many open cbases */
  217. #define CBECORRUPT    (CBEOS - 2)    /* cbase is corrupt */
  218. #define CBENOPEN    (CBEOS - 3)    /* cbase is not open */
  219. #define CBELOCK        (CBEOS - 4)    /* incorrect lock type */
  220. #define CBENREC        (CBEOS - 5)    /* no record */
  221. #define CBENKEY        (CBEOS - 6)    /* no key */
  222. #define CBEDUP        (CBEOS - 7)    /* duplicate */
  223. #define CBEPRFILE    (CBEOS - 8)    /* printable file error */
  224. #define CBEPANIC    (CBEOS - 9)    /* internal cbase error */
  225.  
  226. #endif        /* #ifndef H_CBASE */
  227.